import { prop, modelOptions } from '@typegoose/typegoose';
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsOptional, Allow } from 'class-validator';

/**
 * Cube 模型 - 立方体组件模型
 */
@modelOptions({
  schemaOptions: {
    collection: 'cubes',
    timestamps: true,
  },
})
export class Cube {
  /**
   * 名称
   */
  @ApiProperty({ description: '名称' })
  @IsNotEmpty({ message: '名称不能为空' })
  @prop()
  cubeName: string;

  /**
   * 对应文件名称
   */
  @ApiProperty({ description: '对应文件名称' })
  @IsNotEmpty({ message: '对应文件名称不能为空' })
  @prop()
  bindFileName: string;

  /**
   * 对应组件字符串
   */
  @ApiProperty({ description: '对应组件字符串' })
  @IsNotEmpty({ message: '对应组件字符串不能为空' })
  @prop()
  bindComponentString: string;

  /**
   * 组件内容的缓存
   */
  @ApiProperty({ description: '组件内容的缓存' })
  @IsOptional()
  @prop()
  bindFileCache?: string;

  /**
   * 类型（normal、carousel等，后期可以用来拓展）
   */
  @ApiProperty({ description: '类型', required: false, example: 'normal' })
  @IsOptional()
  @prop({default: 'normal' })
  type?: string;

  /**
   * 绑定图片地址
   */
  @ApiProperty({ description: '绑定图片地址', required: false })
  @IsOptional()
  @prop()
  imageUrl?: string;

  /**
   * 创建时间
   */
  @ApiProperty({ description: '创建时间' })
  @Allow()
  createdAt?: Date;

  /**
   * 更新时间
   */
  @ApiProperty({ description: '更新时间' })
  @Allow()
  updatedAt?: Date;
}